/*
 * Bus.h
 *
 */

#ifndef BUS_H_
#define BUS_H_

#include <list>
#include "Persona.h"
#include "APICommon.h"
#include "Middleware/BusSemaphore.h"

namespace API {

class SalaBus;

class Bus {

	typedef std::list<Persona> personaList;
public:
	Bus(BusId nBus);
	virtual ~Bus();

	void suboAlBus(Persona &persona, int &error);

	void bajoDelBus(Persona &persona, int &error);

	void init();

	void destroy();

	void descargar();

	void indicarHayPasajeros();

	void run(SalaId sala1,SalaId sala2);

protected:
	void viajar();
private:
	SalaId m_salaActual;
	SalaId m_salaDestino;
	BusId m_busId;
	bool m_doRun;
	int m_capacidad;

	personaList m_pasajeros;
	BusSemaphore *m_busSem;
	SalaBus * m_sala;
	MessageQueue2<entryBusRequest> m_loadPassengerQueue;
	MessageQueue2<entryBusReply> m_unloadPassengerQueue;
};

}

#endif /* BUS_H_ */
